package com.atguigu.juc.day04.cf;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

public class Demo02FutureGet {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        // 1、创建 Callable 类型的对象封装线程中要执行的任务
        Callable<String> callable = ()->{

            TimeUnit.SECONDS.sleep(10);

            return "task normal result";
        };

        // 2、把 Callable 对象封装到 FutureTask 对象中
        FutureTask<String> futureTask = new FutureTask<>(callable);

        // 3、把 FutureTask 对象封装到 Thread 对象中并启动线程
        new Thread(futureTask).start();

        // 4、获取目标任务的结果
        // ※Future接口的不足：main 线程执行到 get() 方法时，如果目标任务尚未结束，那么 main 线程就会被阻塞
        String taskResult = futureTask.get();
        System.out.println("taskResult = " + taskResult);

    }

}
